﻿Imports DTO
Imports DAO
Imports BUS
Imports System.IO
Imports System.Text.RegularExpressions



Public Class frmLapTheDocGia : Inherits DevComponents.DotNetBar.Office2007Form
    Private m_Nhanvien As CNhanVienDTO
    Public Property NhanVien() As CNhanVienDTO
        Get
            Return m_Nhanvien
        End Get
        Set(ByVal value As CNhanVienDTO)
            m_Nhanvien = value
        End Set
    End Property
    'số thứ tự của listview
    Private stt As Integer = 0

    ' Kiểm tra tên độc giả: không được rổng
    Private Function KiemTraTenDocGia() As Boolean
        If txtTenDocGia.Text = "" Then
            Return False
        End If
        Return True
    End Function

    ' Kiểm tra địa chỉ: không được rổng:
    Private Function KiemTraDiaChi() As Boolean
        If txtDiaChi.Text = "" Then
            Return False
        End If
        Return True
    End Function


    ' Kiểm tra email: dùng regular expression
    Public Function KiemTraEmail() As Boolean
        Dim Parttern As String = "\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
        If (Regex.IsMatch(txtEmail.Text, Parttern)) Then
            Return True
        End If
        Return False
    End Function


    ' Kiểm tra: loại độc giả: không được để trống
    Public Function KiemTraLoaiDocGia() As Boolean
        If (cboLoaiDocGia.SelectedIndex = (-1)) Then
            Return False
        End If
        Return True
    End Function





    ' Hàm kiểm tra dữ liệu hợp lệ:
    Public Function KiemTraDuLieu() As Boolean
        If (KiemTraTenDocGia() = False) Then
            MessageBox.Show("Tên độc giả không được để trống!", "Thong Bao")
            txtTenDocGia.Focus()
            Return False
        End If

        If (KiemTraDiaChi() = False) Then
            MessageBox.Show("Địa chỉ không được để trống!", "Thong Bao")
            txtDiaChi.Focus()
            Return False
        End If


        If (KiemTraEmail() = False) Then
            MessageBox.Show("Email có dạng: c@v.d", "Thong Bao")
            txtEmail.Focus()
            Return False
        End If

        If (KiemTraLoaiDocGia() = False) Then
            MessageBox.Show("Chưa chọn loại độc giả", "Thong Bao")
            Return False
        End If

        Return True

    End Function

    Private Sub Reset()
        txtDiaChi.Text = ""
        txtEmail.Text = ""
        cboLoaiDocGia.SelectedIndex = -1
        dtpNgaySinh.Value = New DateTime(1990, 1, 1)
        txtTenDocGia.Text = ""
        dtpNgayLapThe.Value = DateTime.Now

    End Sub

    Dim listdocgiabus As New List(Of CDocGiaDTO)
    Private Sub frmLapTheDocGia_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Thiết lập giá trị mặc định cho ngày lập thẻ:
        dtpNgayLapThe.Value = DateTime.Now
        ' Thiết lập giá trị mặc định cho ngày sinh:
        dtpNgaySinh.Value = New DateTime(1990, 1, 1)

        ' Load loại độc giả
        Dim _loaidocgiabus As New CLoaiDocGiaBUS()
        cboLoaiDocGia.Items.Clear()
        Dim listloaidocgia As List(Of CLoaiDocGiaDTO) = _loaidocgiabus.LoadLoaiDocGia()

        For Each ldg As CLoaiDocGiaDTO In listloaidocgia
            cboLoaiDocGia.Items.Add(ldg)
        Next
        cboLoaiDocGia.ValueMember = "Ma"
        cboLoaiDocGia.DisplayMember = "Ten"


        ' load toàn bộ dữ liệu vào list view:
        ResetData()
        txtMaNhanVien.Text = m_Nhanvien.Ma
        txtTenNhanVien.Text = m_Nhanvien.HoTen
    End Sub


    Private Sub btnThoat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThoat.Click
        Me.Close()
    End Sub


    Private Sub btnThem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThem.Click
        ' mình sẽ xử lý cái thằng ngày hết hạn ở đây
        ' Kiểm tra dữ liệu về mặt giao diện:
        If (KiemTraDuLieu()) Then
            Dim _docgia As New CDocGiaDTO()
            _docgia.HoTen = txtTenDocGia.Text
            _docgia.DiaChi = txtDiaChi.Text
            _docgia.Email = txtEmail.Text
            _docgia.NgaySinh = dtpNgaySinh.Value
            _docgia.NgayLapThe = dtpNgayLapThe.Value
            Dim gtt As Integer = New CDocGiaDAO().LayGiaTriThe()
            Dim ngayhh As Integer = DatePart(DateInterval.Day, _docgia.NgayLapThe)
            Dim thanghh As Integer = DatePart(DateInterval.Month, _docgia.NgayLapThe)
            Dim namhh As Integer = DatePart(DateInterval.Year, _docgia.NgayLapThe)

            If (thanghh + gtt > 12) Then
                thanghh = thanghh + gtt - 12
                namhh += 1
            Else
                thanghh = thanghh + gtt
            End If
            _docgia.MaNhanVien = txtMaNhanVien.Text
            _docgia.NgayHetHan = New DateTime(namhh, thanghh, ngayhh)
            _docgia.TongNo = 0
            Dim ldg As CLoaiDocGiaDTO = cboLoaiDocGia.SelectedItem
            _docgia.MaLoaiDocGia = ldg.Ma

            Dim kqthem As Boolean = New CDocGiaBUS().ThemDocGia(_docgia)
            If (kqthem) Then
                listdocgiabus.Add(_docgia)
                Dim liv As New ListViewItem(stt)
                liv.SubItems.Add(_docgia.Ma)
                liv.SubItems.Add(_docgia.HoTen)
                liv.SubItems.Add(New CNhanVienBUS().LayTenNhanVienKhiBietMa(_docgia.MaNhanVien))
                lvDocGia.Items.Add(liv)
                stt += 1
                MessageBox.Show("Thêm thành công!", "Thong Bao")
                Reset()
            Else
                MessageBox.Show("Thêm thất bại!", "Thong Bao")
                Reset()
            End If
        End If
    End Sub

    Private Sub lvDocGia_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lvDocGia.SelectedIndexChanged
        If (lvDocGia.SelectedItems.Count > 0) Then
            Dim lvi As ListViewItem = lvDocGia.SelectedItems(0)
            Dim docgia As New CDocGiaDTO()
            docgia = listdocgiabus.Item(Convert.ToInt32(lvi.SubItems(0).Text))
            txtMaDocGia.Text = docgia.Ma
            txtDiaChi.Text = docgia.DiaChi
            txtEmail.Text = docgia.Email
            txtMaNhanVien.Text = docgia.MaNhanVien
            txtTenDocGia.Text = docgia.HoTen
            Dim i As Integer = 0
            For Each vl As CLoaiDocGiaDTO In cboLoaiDocGia.Items
                If vl.Ma = docgia.MaLoaiDocGia Then
                    Exit For
                End If
                i += 1
            Next
            cboLoaiDocGia.SelectedIndex = i
            txtTenNhanVien.Text = New CNhanVienBUS().LayTenNhanVienKhiBietMa(docgia.MaNhanVien)
            dtpNgaySinh.Value = docgia.NgaySinh
        End If


    End Sub

    Private Sub ResetData()
        stt = 0
        listdocgiabus.Clear()
        listdocgiabus = New CDocGiaBUS().LoadDanhSachDocGia()
        If (listdocgiabus.Count <> 0) Then
            Dim liv As ListViewItem
            lvDocGia.Items.Clear()
            For Each docgia As CDocGiaDTO In listdocgiabus
                liv = New ListViewItem(stt)
                liv.SubItems.Add(docgia.Ma)
                liv.SubItems.Add(docgia.HoTen)
                liv.SubItems.Add(New CNhanVienBUS().LayTenNhanVienKhiBietMa(docgia.MaNhanVien))
                lvDocGia.Items.Add(liv)
                stt += 1
            Next
        End If
    End Sub

    Private Sub btnCapNhat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCapNhat.Click
        If (KiemTraDuLieu()) Then
            Dim _docgia As New CDocGiaDTO()
            _docgia.HoTen = txtTenDocGia.Text
            _docgia.DiaChi = txtDiaChi.Text
            _docgia.Email = txtEmail.Text
            _docgia.NgaySinh = dtpNgaySinh.Value
            _docgia.NgayLapThe = dtpNgayLapThe.Value
            Dim gtt As Integer = New CDocGiaDAO().LayGiaTriThe()
            Dim ngayhh As Integer = DatePart(DateInterval.Day, _docgia.NgayLapThe)
            Dim thanghh As Integer = DatePart(DateInterval.Month, _docgia.NgayLapThe)
            Dim namhh As Integer = DatePart(DateInterval.Year, _docgia.NgayLapThe)

            If (thanghh + gtt > 12) Then
                thanghh = thanghh + gtt - 12
                namhh += 1
            Else
                thanghh = thanghh + gtt
            End If
            _docgia.MaNhanVien = txtMaNhanVien.Text
            _docgia.NgayHetHan = New DateTime(namhh, thanghh, ngayhh)
            _docgia.TongNo = 0
            Dim ldg As CLoaiDocGiaDTO = cboLoaiDocGia.SelectedItem
            _docgia.MaLoaiDocGia = ldg.Ma
            _docgia.Ma = Convert.ToInt32(txtMaDocGia.Text)

            Dim kqthem As Boolean = New CDocGiaBUS().CapNhatDocGia(_docgia)
            If (kqthem) Then
                ResetData()
                MessageBox.Show("Cập nhật thành công!", "Thông Báo")
                Reset()
            Else
                MessageBox.Show("Cập nhật thất bại!", "Thông Báo")
                Reset()
            End If
        End If
    End Sub
End Class